package com.gzsxy.Test;

/**
 * 直接插入排序
 * 思路：设置i和j两个值，i值始终代表最后一个数字， 让j为i前面的所有数字赋值  通过j=i-1先进行判断
 * <p>
 * 在要排序的一组数中，假设前面(n-1)[n>=2] 个数已经是排好顺序的，
 * 现在要把第n个数插到前面的有序数中，使得这n个数也是排好顺序的。
 * 如此反复循环，直到全部排好顺序
 */
public class Test1 {


    public static void saymsg(int[] src) {
        System.out.println("排序后的数组为:");
        for (int i = 0; i < src.length; i++) {
            System.out.print(+src[i]);
            System.out.print(" ");
        }
    }


    private static void insertSort(int[] src) {
        for (int i = 1; i < src.length; i++) {
            int j = i - 1;

            int temp = src[i];
            //通过最后一个数字始终与前一个数字进行比较，若后面数字要比前面小，则将前面数字往后移，
            // 一直都是最后一个数字跟前面数字依次进行比较，就是一下for循环的含义，因为数字都是从最前面的数字进行排序，
            // 所以不存在说中间有数字没有排序的现在    比如  9 8  6   排完后不存在 6 9 8 现象，  因为9 8 在第一轮就进行了排序 8 9
            for (; j >= 0 && temp < src[j]; j--) {
                src[j + 1] = src[j];
            }
            //
            src[j + 1] = temp;
        }
    }


//    public static void main(String[] args) {
//        int[] src = {49,38,50,64,20,15,65,25,23,26,80,45};
//        insertSort(src);
//        saymsg(src);
//    }


//第二次写
//    public static void zhijie(int[] src){
//        for (int i = 1; i < src.length; i++) {
//            int j = i-1;
//            for (; j >= 0 && src[i] < src[j]; j--){
//                 src[j + 1]= src[j];
//            }
//            src[j + 1] = src[i];
//        }
//    }
//
//    public static void main(String[] args) {
//        int[] src = {49,38,50,64,20,15,65,25,23,26,80,45};
//        zhijie(src);
//        saymsg(src);
//    }


}
